class Format {
    static timeFormat(time) {
        let temp = new Date(time * 1000);
        // padStart和padEnd前要转成字符串
        return temp.getFullYear() + "-" +
            (temp.getMonth() + 1).toString().padStart(2, '0') + '-' +
            temp.getDate().toString().padStart(2, '0') + " " +
            temp.getHours().toString().padStart(2, '0') + ':' +
            temp.getMinutes().toString().padStart(2, '0') + ':' +
            temp.getSeconds().toString().padStart(2, '0')
    }
    static objChangeKeys(obj, keyList) { // 两者长度要想等 // 批量替换对象key // 原对象 新keys数组(长度等于原对象元素个数)
        let index = 0, res = {}
        for (let i in obj) { res[keyList[index]] = obj[i]; index++ }
        return res
    }
    static arrLighter(obj) { // 数组内对象完全相同 去重
        let uniques = [];
        let stringify = {};
        for (let i = 0; i < obj.length; i++) {
            let keys = Object.keys(obj[i]);
            keys.sort(function (a, b) {
                return (Number(a) - Number(b));
            });
            let str = '';
            for (let j = 0; j < keys.length; j++) {
                str += JSON.stringify(keys[j]);
                str += JSON.stringify(obj[i][keys[j]]);
            }
            if (!stringify.hasOwnProperty(str)) {
                uniques.push(obj[i]);
                stringify[str] = true;
            }
        }
        uniques = uniques;
        return uniques;
    }
}
class Copy {
    // let goodEditBaseInfoDefault = JSON.parse(JSON.stringify(goodEditBaseInfo)) // 会跳过值为undefined的项
    // let goodEditBaseInfoDefault = {}; Object.assign(goodEditBaseInfoDefault, goodEditBaseInfo) // 嵌套对象值会跟着拷贝前的数据改变
    // const { ...goodEditBaseInfoDefault } = goodEditBaseInfo // 嵌套对象值会跟着拷贝前的数据改变

    // static deepCopy(obj) { // 深度完全拷贝 包括其中对象数组 递归 // static方法无法调用本身
    //     let type = Object.prototype.toString.call(obj)
    //     if (type == "[object Array]") { // 针对数组
    //         let backObj = [];
    //         for (let val of obj) {
    //             backObj.push(deepCopy(val))
    //         };
    //         return backObj;
    //     }
    //     if (type == "[object Object]") { // 针对对象
    //         let backObj = {};
    //         for (let key in obj) {
    //             if (obj.hasOwnProperty(key)) {
    //                 backObj[key] = deepCopy(obj[key])
    //             }
    //         };
    //         return backObj;
    //     }
    //     return obj;
    // }

    // constructor(obj) {
    //     console.log(obj);
    //     console.log(this.constructor());
    //     let type = Object.prototype.toString.call(obj)
    //     if (type == "[object Array]") { // 针对数组
    //         let backObj = [];
    //         for (let val of obj) {
    //             backObj.push(this.constructor(val))
    //         };
    //         return backObj;
    //     }
    //     if (type == "[object Object]") { // 针对对象
    //         let backObj = {};
    //         for (let key in obj) {
    //             if (obj.hasOwnProperty(key)) {
    //                 backObj[key] = this.constructor(obj[key])
    //             }
    //         };
    //         return backObj;
    //     }
    //     return obj;
    // }
}

class VueDirective { //自定义指令 //未完成
    static install(app) {
        app.directive('autoFocus', {
            inserted: function (e) {
                e.children[0].focus
            }
        })
    }
}

function deepCopy(obj) { // 深度完全拷贝 包括其中对象/数组 递归
    let type = Object.prototype.toString.call(obj)
    if (type == "[object Array]") { // 针对数组
        let backObj = [];
        for (let val of obj) { backObj.push(deepCopy(val)) };
        return backObj;
    }
    if (type == "[object Object]") { // 针对对象
        let backObj = {};
        for (let key in obj) { if (obj.hasOwnProperty(key)) { backObj[key] = deepCopy(obj[key]) } };
        return backObj;
    }
    return obj;
}

function arrayCombine(arr) { // 数组组合 //[[],[],[]]=>[]
    return Array.prototype.reduce.call( //笛卡尔积  //https://www.cnblogs.com/fps2tao/p/13701680.html
        arguments, function (a, b) {
            let ret = []
            a.forEach(function (a) {
                b.forEach(function (b) {
                    ret.push(a.concat([b]))
                })
            })
            return ret
        }, [[]]
    )
}


// let timeNow = ref({})
// setInterval(function () {
//     timeNow.value = { time: new Date().getSeconds() }
// }, 1000)

// const timeWatcher = watch(
//     () => timeNow.value,
//     // timeNow,
//     (newVal, oleVal) => {
//         console.log(newVal, oleVal);
//         if (newVal.time === 10) {
//             timeWatcher() //达到条件调用该函数即可关闭监听
//         }
//     }
// )


export { Format, Copy, VueDirective, deepCopy, arrayCombine };